//给定一个非空字符串 s，请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。
//
//
//
// 示例 1:
//
//
//输入: s = "aba"
//输出: true
//
//
// 示例 2:
//
//
//输入: s = "abca"
//输出: true
//解释: 可以删除 "c" 字符 或者 "b" 字符
//
//
// 示例 3:
//
//
//输入: s = "abc"
//输出: false
//
//
//
// 提示:
//
//
// 1 <= s.length <= 10⁵
// s 由小写英文字母组成
//
//
//
//
//
// 注意：本题与主站 680 题相同： https://leetcode-cn.com/problems/valid-palindrome-ii/
//
// Related Topics 贪心 双指针 字符串 👍 75 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
//? 暴力
function validPalindrome(s: string): boolean {

    let left = 0
    let right = s.length - 1
    let flag = false
    while (left < right) {
        if (s[left] !== s[right]) {
            if (flag === false) {
                flag = true
                //? 两边挨着
                if (left + 1 === right) {
                    return true
                }
                //? 没有挨着 需要删掉其中一个 或者存在直接false的情况 如abbbbca 删一个可以 abdbdca 删哪个都不行
                else {
                    if (s[left + 1] === s[right] && s[right - 1] === s[left]){
                        return judge(s.split('').slice(left,right).join('')) || judge(s.split('').slice(left + 1,right + 1).join(''))
                    }
                    else if (s[right - 1] === s[left]) {
                        right--
                    }
                    else if (s[left + 1] === s[right]) {
                        left++
                    }
                    else if (s[left + 1] !== s[right] && s[right - 1] !== s[left]){
                        return false
                    }

                }
            }
            else return false
        }
        left++
        right--
    }
    return true
};
function judge(s) {
    let left = 0
    let right = s.length - 1
    while (left < right) {
        if (s[left] !== s[right]) return false
        left++
        right--
    }
    return true
}
//leetcode submit region end(Prohibit modification and deletion)
